package com.hjt.gulimall.auth;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 *
 * @author:97007
 * @date:2021/9/28 12:17
 *
 * EnableRedisHttpSession
 * SpringSession原理
 * 1.EnableRedisHttpSession 引入了RedisHttpSessionConfiguration的配置。
 *  RedisHttpSessionConfiguration给容器注入了redisOperationsSessionRepository（使用redis操作session数据的封装类）
 *  1）redisOperationsSessionRepository： redis操作session的封装类
 *
 *  同时RedisHttpSessionConfiguration继承SpringHttpSessionConfiguration，
 *  SpringHttpSessionConfiguration给容器注入了SessionRepositoryFilter
 *  2）SessionRepositoryFilter：session操作的过滤器SessionRepository
 *     SessionRepositoryFilter从容器中接收SessionRepository对象，就可以使用到第一步中容器中注入的redisOperationsSessionRepository，
 *     如果使用其他方式操作session，还可以注入不同的SessionRepository对象。
 *
 *     SessionRepositoryFilter的doFilterInternal方法会在filter方法中被调用
 *     主要是对HttpServletRequest和HttpServletResponse做了包装，
 *     SessionRepositoryRequestWrapper包装类重写了getSession()的方法，在获取Session的时候使用了SessionRepository来获取Session，
 *     而SessionRepository就是第一步注入的redisOperationsSessionRepository
 *
 */
@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableRedisHttpSession
public class GuliMallAuthApplication {
    public static void main(String[] args) {
        SpringApplication.run(GuliMallAuthApplication.class, args);
    }
}
